package leetcode_day._2021._202103;

/**
 * @author yzh
 * @data 2021/3/21 11:52
 * 这道题在数组的二维数组变换中做过了，现在再做一遍
 * 除去第一行和第一列，其他位置上如果出现 0，就把这个位置上对应的第一行和第一列置为 0
 * 在这之前要判断第一行和第一列是否存在 0
 * 这就区别了这个 0 是原先存在的，还是后面造出来的
 */
public class _21_73 {

    public void setZeroes(int[][] matrix) {
        boolean row = false, col = false;
        int m = matrix.length, n = matrix[0].length;
        for (int[] ints : matrix) {
            if (ints[0] == 0) {
                row = true;
                break;
            }
        }
        for (int i = 0; i < n; i++) {
            if (matrix[0][i] == 0) {
                col = true;
                break;
            }
        }
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                if (matrix[i][j] == 0) {
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }
        for (int i = 1; i < m; i++) {
            if (matrix[i][0] == 0) {
                for (int j = 1; j < n; j++) {
                    matrix[i][j] = 0;
                }
            }
        }
        for (int i = 1; i < n; i++) {
            if (matrix[0][i] == 0) {
                for (int j = 1; j < m; j++) {
                    matrix[j][i] = 0;
                }
            }
        }
        if (row) {
            for (int i = 0; i < m; i++) {
                matrix[i][0] = 0;
            }
        }
        if (col) {
            for (int i = 0; i < n; i++) {
                matrix[0][i] = 0;
            }
        }
    }

}
